#include "delay.h"
#define AHB_INPUT 72 // 主频72MHz

/**
 * 利用SysTick实现延时
 * 系统时基定时器用于RTOS,也可以当成一个标准的24位递减计时器;
 * FCLK=HCLK;STCLK=HCLK/8
 */
void delay_us(uint32_t us)
{
    SysTick->LOAD = AHB_INPUT * us; // 主频72MHz, 计数72次为1us
    SysTick->CTRL = 0x00000005;     // 设置内核时钟源为FCLK;CLKSOURCE=1,ENABLE=1
    while (!(SysTick->CTRL & 0x00010000))
        ;                       //  等待计数为0; bit[16]为1:计数到0;
    SysTick->CTRL = 0x00000004; // 时钟源为FCLK不变，并关闭定时器;ENABLE设置为0
}
void delay_ms(uint16_t ms)
{
    while (ms-- != 0)
    {
        delay_us(1000);
    }
}
void delay_s(uint16_t s)
{
    while (s-- != 0)
    {
        delay_ms(1000);
    }
}
